package main

import (
	"fmt"
	"sync"
	"time"
)

// 要实现单例的数据结构
type SingleObject struct {
}

// 变量once是一个sync.Once的实例
var once sync.Once

// 最终要获得的单例对象
var instance *SingleObject

//获得单例对象的方法
func getInstance() *SingleObject {
	// 保证匿名函数仅被执行一次
	once.Do(func() {
		// 为全局变量instance赋值
		instance = &SingleObject{}
		// 打印执行信息"实例化SingleObject"
		fmt.Println("实例化SingleObject")
	})

	return instance
}

func main11() {
	// 启动100个子协程，并发调用getInstance()方法。
	for i := 0; i < 100; i++ {
		go func() {
			_ = getInstance()
		}()
	}

	time.Sleep(time.Second)
}
